<?php

defined('G_IN_SYSTEM')or exit('No permission resources.');

//ini_set("display_errors","OFF");

class malipay_url extends SystemAction {

    public function __construct() {
        $this->db = System::DOWN_sys_class('model');
    }

    /* 同步通知 */

    public function qiantai() {
        sleep(2);
        $out_trade_no = $_GET['out_trade_no']; //商户订单号
        $dingdaninfo = $this->db->GetOne("select * from `@#_member_addmoney_record` where `code` = '$out_trade_no'");
        if (!$dingdaninfo || $dingdaninfo['status'] == '未付款') {
            _message("支付失败");
        } else {
            if (empty($dingdaninfo['scookies'])) {
                _message("充值成功!", WEB_PATH . "/member/home/userbalance");
            } else {
                if ($dingdaninfo['scookies'] == '1') {
                    _message("支付成功!", WEB_PATH . "/member/cart/paysuccess");
                } else {
                    _message("商品还未购买,请重新购买商品!", WEB_PATH . "/member/cart/cartlist");
                }
            }
        }
    }

/* function end */

    public function curl_init_post($url, $array = array()) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array));
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }

    /* 异步通知 */

    public function houtai() {

        include G_SYSTEM . "modules/pay/lib/alipay/alipay_notify.class.php";
        $pay_type = $this->db->GetOne("SELECT * from `@#_pay` where `pay_class` = 'alipay' and `pay_start` = '1'");
        $pay_type_key = unserialize($pay_type['pay_key']);

        $data = array(
            'service' => 'Pay.Payverify',
            'partner' => $pay_type_key['id']['val'],
            'sign' => md5(md5($pay_type_key['id']['val'] . $pay_type_key['key']['val'])),
            'trade_no' => $_POST['trade_no'],
        );

        $array = $this->curl_init_post('http://v2.api.haoteam.net/?', $data);
        $Auth = json_decode($array);

        if ($data['sign'] != $_POST['sign']) {
            echo 'fail';
            exit;
        }

        if ($Auth->data->trade_no) {
            $this->out_trade_no = $out_trade_no = $_POST['out_trade_no']; //商户订单号
            $trade_no = $_POST['trade_no'];   //支付宝交易号
            $trade_status = $_POST['trade_status']; //交易状态

            if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                $ret = $this->updata_order();
                if ($ret == '已付款' || $ret == '充值完成' || $ret == '商品购买成功') {
                    echo 'success';
                    exit;
                }
                if ($ret == '充值失败' || $ret == '商品购买失败') {
                    echo $ret;
                    exit;
                }
                echo "success";  //请不要修改或删除
            }
        } else {
            echo "fail";
        }
    }

    /* 支付与充值处理 */

    private function updata_order() {
        $pay_type = $this->db->YOne("SELECT * from `@#_payment` where `pay_class` = 'malipay' and `pay_start` = '1'");
        $out_trade_no = $this->out_trade_no;
        $this->db->tijiao_start();
        $dingdaninfo = $this->db->YOne("select * from `@#_yonghu_addmoney_record` where `code` = '$out_trade_no' for update");
        if (!$dingdaninfo) {
            return false;
        } //没有该订单,失败
        if ($dingdaninfo['status'] == '已付款') {
            return '已付款';
        }
        $c_money = intval($dingdaninfo['money']);
        $uid = $dingdaninfo['uid'];
        $time = time();

        $up_q1 = $this->db->Query("UPDATE `@#_yonghu_addmoney_record` SET `pay_type` = '手机支付宝', `status` = '已付款' where `id` = '$dingdaninfo[id]' and `code` = '$dingdaninfo[code]'");
        $up_q2 = $this->db->Query("UPDATE `@#_yonghu` SET `money` = `money` + $c_money where (`uid` = '$uid')");
        $up_q3 = $this->db->Query("INSERT INTO `@#_yonghu_zhanghao` (`uid`, `type`, `pay`, `content`, `money`, `time`) VALUES ('$uid', '1', '账户', '充值', '$c_money', '$time')");

        if ($up_q1 && $up_q2 && $up_q3) {
            $this->db->tijiao_commit();
        } else {
            $this->db->tijiao_rollback();
            return '充值失败';
        }
        if (empty($dingdaninfo['scookies'])) {
            return "充值完成"; //充值完成	
        }

        $scookies = unserialize($dingdaninfo['scookies']);
        $pay = System::DOWN_App_class('pay', 'pay');
        $pay->scookie = $scookies;
        $ok = $pay->init($uid, $pay_type['pay_id'], 'go_record'); //云购商品	
        if ($ok != 'ok') {
            $_COOKIE['Cartlist'] = '';
            _setcookie('Cartlist', NULL);
            return '商品购买失败'; //商品购买失败			
        }

        $check = $pay->start_pay(1);
        if ($check) {
            $this->db->Query("UPDATE `@#_yonghu_addmoney_record` SET `scookies` = '1' where `code` = '$out_trade_no' and `status` = '已付款'");
            $_COOKIE['Cartlist'] = '';
            _setcookie('Cartlist', NULL);
            return "商品购买成功";
        } else {
            return '商品购买失败';
        }
    }

/* function end */
}
